package org.usts.trainning.supermarket.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.usts.trainning.supermarket.entity.User;
import org.usts.trainning.supermarket.util.DBUtilities;

public class UserDao {
	final String configFile = "jdbc.properties";
	// 配置文件
	private Connection conn = null;
	String tableName = null;

	/** * 获得数据库连接 */
	private Connection getConnection() {
		// 获得数据库连接
		// 取得配置文件存储的路径,此外约定文件是存放在项目的“根”下
		// 注意路径中不要含有中文。
		if (conn == null) {
			String strPath = this.getClass().getResource("/jdbc.properties").getPath();
			conn = DBUtilities.connect(strPath);
		}
		return conn;
	}

	/** * 获得数据库连接 */
	private void getConnection(String fileName) {
		conn = DBUtilities.connect(fileName);
	}

	/** * @param */
	public UserDao() {
		getConnection();
		if (conn == null) {
			try {
				throw new SQLException("无法连接数据库！");
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/** * @param conn */
	public UserDao(String configFile) {
		getConnection(configFile);
		if (conn == null) {
			try {
				throw new SQLException("无法连接数据库！");
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

	// 登陆用户
	public User findUserByName(String uname) {
		User user = null;
		String[] params = null;
		tableName = "user";
		// 1.判断数据库的连接是否已经获取
		if (conn != null) {
			// 2.准备 SQL 语句
			String sql = "Select * From " + tableName + " where uname = ? ";
			params = new String[] { uname };
			ResultSet rs = null;
			try {
				// 3.执行 SQL 语句
				rs = DBUtilities.querySQL_2(conn, sql, params);
				// 4.处理查询结果
				if (rs != null) {
					if (rs.next()) {
						user = new User();
						user.setUid(rs.getInt(1));
						user.setUcode(rs.getString(2));
						user.setUname(rs.getString(3));
						user.setPassword(rs.getString(4));
						user.setUsex(rs.getString(5));
						user.setUage(rs.getInt(6));
						user.setPhone(rs.getString(7));
						user.setPaddress(rs.getString(8));
						user.setUserRole(rs.getString(9));
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					rs.close();
				} catch (SQLException e) {
				}
			}
		}

		return user;
	}
	// 查看所有客户信息

	public List<User> findAllUser() {
		// TODO Auto-generated method stub
		List<User> list = null;
		String[] params = null;
		tableName = "user";
		// 1.判断数据库的连接是否已经获取
		if (conn != null) {
			// 2.准备 SQL 语句
			String sql = "Select * From " + tableName;
			params = new String[] {};
			ResultSet rs = null;
			try {
				// 3.执行 SQL 语句
				rs = DBUtilities.querySQL(conn, sql, params); // 4.处理查询结果
				if (rs != null) {
					list = new ArrayList<User>();
					while (rs.next()) {
						User user = new User();
						user.setUid(rs.getInt(1));
						user.setUcode(rs.getString(2));
						user.setUname(rs.getString(3));
						user.setPassword(rs.getString(4));
						user.setUsex(rs.getString(5));
						user.setUage(rs.getInt(6));
						user.setPhone(rs.getString(7));
						user.setPaddress(rs.getString(8));
						user.setUserRole(rs.getString(9));
						list.add(user);

					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					rs.close();
				} catch (SQLException e) {
				}
			}
		}
		return list;
	}

	// 根据姓名查找
	public List<User> findAllUser(String uname) {
		// TODO Auto-generated method stub
		List<User> list = null;
		String[] params = null;
		tableName = "user";
		// 1.判断数据库的连接是否已经获取
		if (conn != null) {
			// 2.准备 SQL 语句
			String sql = "Select * From " + tableName + " where uname= ?";
			params = new String[] { uname };
			ResultSet rs = null;
			try {
				// 3.执行 SQL 语句
				rs = DBUtilities.querySQL_2(conn, sql, params); // 4.处理查询结果
				if (rs != null) {
					list = new ArrayList<User>();
					while (rs.next()) {
						User user = new User();
						user.setUid(rs.getInt(1));
						user.setUcode(rs.getString(2));
						user.setUname(rs.getString(3));
						user.setPassword(rs.getString(4));
						user.setUsex(rs.getString(5));
						user.setUage(rs.getInt(6));
						user.setPhone(rs.getString(7));
						user.setPaddress(rs.getString(8));
						user.setUserRole(rs.getString(9));
						list.add(user);

					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					rs.close();
				} catch (SQLException e) {
				}
			}
		}
		return list;
	}

	// 根据id编辑用户信息
	public Boolean updateUserById(User user) {
		boolean result = false;
		String[] params = null;
		tableName = "user";
		// 1.判断数据库的连接是否已经获取
		if (conn != null) {
			// 2.准备 SQL 语句，及参数
			String sql = "update " + tableName + " set uname=?,uage=?,usex=?,phone=?,paddress=?,userRole=? where uid=?";

			params = new String[] { user.getUname(), String.valueOf(user.getUage()), user.getUsex(), user.getPhone(),
					user.getPaddress(), user.getUserRole(), String.valueOf(user.getUid()) };
			// 3.执行查询的 SQL语句
			result = DBUtilities.updateSQL(conn, sql, params);
		}
		return result;
	}

	// 增加用户
	public Boolean addUser(User user) {
		boolean result = false;
		String[] params = null;
		tableName = "user";
		// 1.判断数据库的连接是否已经获取
		if (conn != null) {
			// 2.准备 SQL 语句，及参数
			String sql = "Insert Into " + tableName
					+ " (ucode,uname,password,usex,uage,phone,paddress,userRole) value(?,?,?,?,?,?,?,?)";
			params = new String[] { user.getUcode(), user.getUname(), user.getPassword(), user.getUsex(),
					String.valueOf(user.getUage()), user.getPhone(), user.getPaddress(), user.getUserRole() };
			// 3.执行查询的 SQL语句
			result = DBUtilities.updateSQL(conn, sql, params);
		}
		return result;
	}

	// 根据id删除用户
	public Boolean deleteUser(Integer uid) {
		boolean result = false;
		String[] params = null;
		tableName = "user";
		// 1.判断数据库的连接是否已经获取
		if (conn != null) {
			// 2.准备 SQL 语句，及参数
			String sql = "DELETE FROM " + tableName + " where uid=?";
			params = new String[] { String.valueOf(uid) };
			// 3.执行查询的 SQL语句
			result = DBUtilities.updateSQL(conn, sql, params);
		}
		return result;
	}

	// 根据id更改密码
	public Boolean modifyPwdById(User user) {
		boolean result = false;
		String[] params = null;
		tableName = "user";
		// 1.判断数据库的连接是否已经获取
		if (conn != null) {
			// 2.准备 SQL 语句，及参数
			String sql = "update " + tableName + " set password=? where uid=?";

			params = new String[] { user.getPassword(), String.valueOf(user.getUid()) };
			// 3.执行查询的 SQL语句
			result = DBUtilities.updateSQL(conn, sql, params);
		}
		return result;
	}
	// // 根據id查詢客戶信息
	// public Client findClientById(Integer id) {
	// Client client = null;
	// String[] params = null;
	// tableName = "client";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "Select * From " + tableName + " where id = ? ";
	// params = new String[] { String.valueOf(id) };
	// ResultSet rs = null;
	// try {
	// // 3.执行 SQL 语句
	// rs = DBUtilities.querySQL(conn, sql, params);
	// // 4.处理查询结果
	// if (rs != null) {
	// if (rs.next()) {
	// client = new Client();
	// client.setId(rs.getInt(1));
	// client.setName(rs.getString(2));
	// client.setPassword(rs.getString(3));
	// client.setAge(rs.getInt(4));
	// client.setSex(rs.getString(5));
	// client.setAddress(rs.getString(6));
	// client.setPhone(rs.getInt(7));
	// client.setEmail(rs.getString(8));
	// client.setProduct(rs.getString(9));
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	// return client;
	// }

	// 根據Name查詢客戶信息

	// public List<Client> orderByName() {
	// List<Client> list = null;
	// String[] params = null;
	// tableName = "client";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "Select * From " + tableName + " ORDER BY name";
	// params = new String[] {};
	// ResultSet rs = null;
	// try {
	// // 3.执行 SQL 语句
	// rs = DBUtilities.querySQL(conn, sql, params); // 4.处理查询结果
	// if (rs != null) {
	// list = new ArrayList<Client>();
	// while (rs.next()) {
	// Client client = new Client();
	// client.setId(rs.getInt(1));
	// client.setName(rs.getString(2));
	// client.setPassword(rs.getString(3));
	// client.setAge(rs.getInt(4));
	// client.setSex(rs.getString(5));
	// client.setAddress(rs.getString(6));
	// client.setPhone(rs.getInt(7));
	// client.setEmail(rs.getString(8));
	// client.setProduct(rs.getString(9));
	// list.add(client);
	//
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	// return list;
	// }
	//
	// // 根据产品排序
	// public List<Client> orderByProduct() {
	// List<Client> list = null;
	// String[] params = null;
	// tableName = "client";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "Select * From " + tableName + " ORDER BY product";
	// params = new String[] {};
	// ResultSet rs = null;
	// try {
	// // 3.执行 SQL 语句
	// rs = DBUtilities.querySQL(conn, sql, params); // 4.处理查询结果
	// if (rs != null) {
	// list = new ArrayList<Client>();
	// while (rs.next()) {
	// Client client = new Client();
	// client.setId(rs.getInt(1));
	// client.setName(rs.getString(2));
	// client.setPassword(rs.getString(3));
	// client.setAge(rs.getInt(4));
	// client.setSex(rs.getString(5));
	// client.setAddress(rs.getString(6));
	// client.setPhone(rs.getInt(7));
	// client.setEmail(rs.getString(8));
	// client.setProduct(rs.getString(9));
	// list.add(client);
	//
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	// return list;
	// }
	//
	// // 查询所有销售人员
	// public List<Sale> findAllSale() {
	// List<Sale> list = null;
	// String[] params = null;
	// tableName = "sale";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "Select * From " + tableName;
	// params = new String[] {};
	// ResultSet rs = null;
	// try {
	// // 3.执行 SQL 语句
	// rs = DBUtilities.querySQL(conn, sql, params); // 4.处理查询结果
	// if (rs != null) {
	// list = new ArrayList<Sale>();
	// while (rs.next()) {
	// Sale sale = new Sale();
	// sale.setId(rs.getInt(1));
	// sale.setName(rs.getString(2));
	// sale.setPassword(rs.getString(3));
	// list.add(sale);
	//
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	// return list;
	// }
	//
	// // 增加销售人员
	// public Boolean addSale(Sale sale) {
	// boolean result = false;
	// String[] params = null;
	// tableName = "sale";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句，及参数
	// String sql = "Insert Into " + tableName + " (name,password) value(?,?)";
	// params = new String[] { sale.getName(), sale.getPassword() };
	// // 3.执行查询的 SQL语句
	// result = DBUtilities.updateSQL(conn, sql, params);
	// }
	// return result;
	// }
	//
	// // 根据id删除销售人员
	// public Boolean deleteSale(Integer id) {
	// boolean result = false;
	// String[] params = null;
	// tableName = "sale";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句，及参数
	// String sql = "DELETE FROM " + tableName + " where id=?";
	// params = new String[] { String.valueOf(id) };
	// // 3.执行查询的 SQL语句
	// result = DBUtilities.updateSQL(conn, sql, params);
	// }
	// return result;
	// }
	//
	// // 根據Name查詢销售信息
	// public Sale findSaleByName(String name) {
	// Sale sale = null;
	// String[] params = null;
	// tableName = "sale";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "Select * From " + tableName + " where name = ? ";
	// params = new String[] { name };
	// ResultSet rs = null;
	// try {
	// // 3.执行 SQL 语句
	// rs = DBUtilities.querySQL_2(conn, sql, params);
	// // 4.处理查询结果
	// if (rs != null) {
	// if (rs.next()) {
	// sale = new Sale();
	// sale.setId(rs.getInt(1));
	// sale.setName(rs.getString(2));
	// sale.setPassword(rs.getString(3));
	//
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	//
	// return sale;
	// }
	//
	// // 根據Name查詢销售信息
	// public Sale findSaleById(int id) {
	// Sale sale = null;
	// String[] params = null;
	// tableName = "sale";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "Select * From " + tableName + " where id = ? ";
	// params = new String[] { String.valueOf(id) };
	// ResultSet rs = null;
	// try {
	// // 3.执行 SQL 语句
	// rs = DBUtilities.querySQL(conn, sql, params);
	// // 4.处理查询结果
	// if (rs != null) {
	// if (rs.next()) {
	// sale = new Sale();
	// sale.setId(rs.getInt(1));
	// sale.setName(rs.getString(2));
	// sale.setPassword(rs.getString(3));
	//
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	//
	// return sale;
	// }
	//
	// // 根据id编辑销售员信息
	// public Boolean updateSaleById(Sale sale) {
	// boolean result = false;
	// String[] params = null;
	// tableName = "sale";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句，及参数
	// String sql = "update " + tableName + " set name=?,password=? where id=?";
	// // UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
	// // WHERE LastName = 'Wilson'
	// params = new String[] { sale.getName(), sale.getPassword(),
	// String.valueOf(sale.getId()) };
	// // 3.执行查询的 SQL语句
	// result = DBUtilities.updateSQL(conn, sql, params);
	// }
	// return result;
	// }
	//
	// // 查询所有管理员账号
	// public List<Admin> showAllAdmin() {
	// List<Admin> list = null;
	// String[] params = null;
	// tableName = "admin";
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "Select * From " + tableName;
	// params = new String[] {};
	// ResultSet rs = null;
	// try {
	// // 3.执行 SQL 语句
	// rs = DBUtilities.querySQL(conn, sql, params); // 4.处理查询结果
	// if (rs != null) {
	// list = new ArrayList<Admin>();
	// while (rs.next()) {
	// Admin admin = new Admin();
	// admin.setId(rs.getInt(1));
	// admin.setName(rs.getString(2));
	// admin.setPassword(rs.getString(3));
	// list.add(admin);
	//
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	// return list;
	// }
	//
	// public int getPage() {
	// int recordCount = 0, t1 = 0, t2 = 0;
	// String[] params = null;
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "select count(*) from client";
	// ResultSet rs = null;
	// try {
	// rs = DBUtilities.querySQL(conn, sql);
	// rs.next();
	// recordCount = rs.getInt(1);
	//
	// if (recordCount % 10 == 0) {
	// t2 = recordCount / 10;
	// } else {
	// t2 = recordCount /10 + 1;
	// }
	//
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	//
	// }
	// return t2;
	// }
	//
	// public List<Client> listUser(int pageNo) {
	// List<Client> list = null;
	// String[] params = null;
	// int pageSize = 10;
	// int page = (pageNo - 1) * 10;
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// ResultSet rs = null;
	// try {
	// // 2.准备 SQL 语句
	// String sql = "select * from client order by id limit ?,?";
	// params = new String[] { String.valueOf(page), String.valueOf(pageSize) };
	// rs = DBUtilities.querySQL(conn, sql, params);
	// if (rs != null) {
	// list = new ArrayList<Client>();
	// while (rs.next()) {
	// Client client = new Client();
	// client.setId(rs.getInt(1));
	// client.setName(rs.getString(2));
	// client.setPassword(rs.getString(3));
	// client.setAge(rs.getInt(4));
	// client.setSex(rs.getString(5));
	// client.setAddress(rs.getString(6));
	// client.setPhone(rs.getInt(7));
	// client.setEmail(rs.getString(8));
	// client.setProduct(rs.getString(9));
	// list.add(client);
	//
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	// return list;
	// }
	// public int getPage_sale() {
	// int recordCount = 0, t1 = 0, t2 = 0;
	// String[] params = null;
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// // 2.准备 SQL 语句
	// String sql = "select count(*) from sale";
	// ResultSet rs = null;
	// try {
	// rs = DBUtilities.querySQL(conn, sql);
	// rs.next();
	// recordCount = rs.getInt(1);
	//
	// if (recordCount % 8 == 0) {
	// t2 = recordCount / 8;
	// } else {
	// t2 = recordCount /8 + 1;
	// }
	//
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	//
	// }
	// return t2;
	// }
	//
	// public List<Sale> listSale(int pageNo) {
	// List<Sale> list = null;
	// String[] params = null;
	// int pageSize = 8;
	// int page = (pageNo - 1) * 8;
	// // 1.判断数据库的连接是否已经获取
	// if (conn != null) {
	// ResultSet rs = null;
	// try {
	// // 2.准备 SQL 语句
	// String sql = "select * from sale order by id limit ?,?";
	// params = new String[] { String.valueOf(page), String.valueOf(pageSize) };
	// rs = DBUtilities.querySQL(conn, sql, params);
	// if (rs != null) {
	// list = new ArrayList<Sale>();
	// while (rs.next()) {
	// Sale sale=new Sale();
	// sale.setId(rs.getInt(1));
	// sale.setName(rs.getString(2));
	// sale.setPassword(rs.getString(3));
	// list.add(sale);
	// }
	// }
	// } catch (Exception e) {
	// e.printStackTrace();
	// } finally {
	// try {
	// rs.close();
	// } catch (SQLException e) {
	// }
	// }
	// }
	// return list;
	// }
	//
	// // 关闭数据库连接
	public void close() {
		try {
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}
